package logika;

import java.util.ArrayList;
import java.util.List;

import utils.TyranizatorLogger;

public class ListaProcesow {
	private List<Proces> procesy = new ArrayList<Proces>();
	private TyranizatorLogger logger;

	public Proces create(int numer) {
		for (Proces it : procesy) {
			if (it.getNumerProcesu() == numer)
				return null;
		}
		Proces p = new Proces(numer, procesy, logger);
		procesy.add(p);
		p.start();
		logger.addLog("DODAJE proces nr [" +numer+"]");
		return p;
	}

	/**
	 * przy usuwaniu tworze nowa liste dlatego, ze inaczej wyskakuje
	 * 
	 * "java.util.ConcurrentModificationException with ArrayList"
	 * 
	 * @param numerProcesu
	 */
	public void delete(int numerProcesu) {
		List<Proces> nowaListaProcesow = new ArrayList<>();
		for (Proces it : procesy) {
			if (it.getNumerProcesu() == numerProcesu) {
				logger.addLog("USUWAM proces nr [" + numerProcesu + "]");
				it.deactiveProces();
			}else{
				nowaListaProcesow.add(it);
			}
		}
		procesy = nowaListaProcesow;
	}

	public int getSize() {
		return procesy.size();
	}

	public Proces get(int num) {
		return procesy.get(num);
	}
	
	public TyranizatorLogger getLogger() {
		return logger;
	}

	public void setLogger(TyranizatorLogger logger) {
		this.logger = logger;
	}

	public void wyczyscKomunikaty(){
		for(Proces it: procesy){
			it.wyczyscKomunikaty();
		}
	}
}
